package userInfoService

import (
	"github.com/kataras/iris/v12"
	"iristest/common/date"
	"iristest/common/encryption"
	"iristest/common/log"
	"iristest/common/middleware"
	"iristest/common/res"
	"iristest/dao/userDao2"
	"iristest/do/user"
)

type IUserInfoService interface {
	Update(info *user.UserInfo) res.Result
	DelForge(ctx iris.Context) res.Result
	Del(ctx iris.Context) res.Result
	Querys() res.Result
}
type UserInfoService struct {
	ud userDao2.IUserDao
}

func New() IUserInfoService {
	return &UserInfoService{
		ud: userDao2.New(),
	}
}

func (uis *UserInfoService) Update(info *user.UserInfo) res.Result {
	ok := uis.ud.UpdateUserInfoByUserId(info)
	if !ok {
		return res.SqlErrors("更新失败")
	}
	return res.Success(nil)
}

func (uis *UserInfoService) DelForge(ctx iris.Context) res.Result {
	iti, _ := ctx.User().GetRaw()
	ti := iti.(*middleware.TokenInfo)
	if ti == nil {
		log.Ex("读取token失败")
		return res.NoLogins("读取token失败")
	}
	userId := ti.UserId
	ok := uis.ud.DelUserAndInfoByIdForge(userId)
	if !ok {
		return res.SqlErrors("删除失败")
	}
	return res.Success(nil)
}

func (uis *UserInfoService) Del(ctx iris.Context) res.Result {
	iti, _ := ctx.User().GetRaw()
	ti := iti.(*middleware.TokenInfo)
	if ti == nil {
		log.Ex("读取token失败")
		return res.NoLogins("读取token失败")
	}
	userId := ti.UserId
	ok := uis.ud.DelUserAndInfoById(userId)
	if !ok {
		return res.SqlErrors("删除失败")
	}
	return res.Success(nil)
}

func (uis *UserInfoService) Querys() res.Result {
	rs := uis.ud.SelectAllUser()
	if rs == nil {
		return res.NotFounds("未找到数据")
	}
	var err error
	for _, v := range *rs {
		v["username"], err = encryption.DecryptByAes(v["username"].(string))
		if err != nil {
			log.Err(err, "ECB decrypt username failed")
			v["username"] = "异常"
		}
		v["birthday"] = date.TimeDayUnixToStr(v["birthday"].(int64))
		v["age"] = date.GetAge(v["birthday"].(string))
	}
	return res.Success(*rs)
}
